﻿// Largest Rectangle in a Histogram POJ - 2559.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//https://vjudge.csgrandeur.cn/problem/POJ-2559
#define  _CRT_SECURE_NO_WARNINGS


#include <iostream>
#include <stdio.h>
#include <stack>
#include <cstring>
#include <algorithm>

using namespace std;


/*
直方图是一个多边形，由一系列以共同基线对齐的矩形组成。这些矩形的宽度相等，但高度可能不同。
例如，左图显示的直方图由高度分别为 2、1、4、5、1、3、3 的矩形组成，其中 1 是矩形的宽度单位：


直方图通常用于表示离散分布，例如文本中字符的频率。请注意，矩形的顺序（即高度）很重要。
计算直方图中以共同基线对齐的最大矩形的面积。右图显示了描述的直方图中最大的对齐矩形。
输入
输入包含多个测试用例。每个测试用例描述一个直方图，以整数 n 开头，表示由多少个矩形组成。
可以假设 1<=n<=100000。然后是 n 个整数 h1,...,hn，其中 0<=hi<=1000000000。
这些数字按从左到右的顺序表示直方图中矩形的高度。最后一个测试用例的输入后面跟一个零。
输出
对于每个测试用例，在一行中输出指定直方图中最大矩形的面积。请记住，该矩形必须与共同基线对齐。


7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0

8
4000


*/


const int N = 100010;
int arr[N];
int lef[N];
int rig[N];
int n;

void solve() {
	stack<int> st;
	memset(lef, 0, sizeof lef);
	memset(rig, 0, sizeof rig);
	for (int i = 1; i <= n; i++) {
		while (!st.empty() && arr[st.top()] >= arr[i])  st.pop();
		if (st.empty()) lef[i] = 0;
		else lef[i] = st.top();
		st.push(i);
	}

	while (!st.empty()) st.pop();

	for (int i = n; i >= 1; i--) {
		while (!st.empty() && arr[st.top()] >= arr[i])  st.pop();
		if (st.empty()) rig[i] = n + 1;
		else  rig[i] = st.top();
		st.push(i);
	}

	long long ans = 0;
	for (int i = 1; i <= n; i++) {
		ans = max(ans, 1LL*arr[i] * (rig[i] - lef[i] - 1));
	}

	printf("%lld\n",ans);
}


int main()
{
	while (cin >> n) {
		if (n == 0) break;
		for (int i = 1; i <= n; i++) scanf("%d",&arr[i]);
		solve();
	}

	return 0;
}

